package fr.denis.service.tests;

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.util.ArrayList;
import java.util.List;

import org.easymock.EasyMock;
import org.junit.Before;
import org.junit.Test;

import fr.denis.busines.BusinessStagiareImpl;
import fr.denis.entity.Organisme;
import fr.denis.entity.Stagiaire;
import fr.denis.interfaces.IDaoStagiaire;
import fr.denis.interfaces.business.IBusinessStagiaire;

public class BuninessServiceWithEasyMock {

    Organisme organismeNominal;
    Stagiaire stagiaireNominal;
    Organisme organismeAlternatif;
    Stagiaire stagiaireAlternatif;
    List<Stagiaire> stagiaires = new ArrayList<Stagiaire>();
    List<Stagiaire> stagiairesHareau = new ArrayList<Stagiaire>();
    List<Stagiaire> noStagiaires = new ArrayList<Stagiaire>();

    IBusinessStagiaire businessStagiaire;

    @Before
    public void setUp() throws Exception {
        
        organismeNominal = new Organisme(1, "AFCEPF", "Malakoff");
        stagiaireNominal = new Stagiaire("hareau", "denis", "Fontenay", organismeNominal);
        stagiaireAlternatif = new Stagiaire("polo", "denis", "Paris", null);
        stagiaires.add(stagiaireNominal);
        stagiairesHareau.add(stagiaireNominal);        
        stagiaires.add(stagiaireAlternatif);
               
        IDaoStagiaire mockDao = EasyMock.createMock(IDaoStagiaire.class);
        
        EasyMock.expect(mockDao.rechercher("hareau")).andReturn(stagiairesHareau);
        EasyMock.expect(mockDao.rechercher("quica")).andReturn(noStagiaires);
        EasyMock.expect(mockDao.rechercher(1)).andReturn(stagiaires);

        EasyMock.replay(mockDao);
        
        businessStagiaire = new BusinessStagiareImpl();
        ((BusinessStagiareImpl) businessStagiaire).setDaoStagiaire(mockDao);
    }

    @Test
    public void RechercherNomExistant() {
        List<Stagiaire> list = businessStagiaire.rechercher(0, "hareau");
        assertNotNull(list);
        assertTrue(list.size() == 1);
        Stagiaire stagiaire = list.get(0);
        assertNotNull(stagiaire);
        assertNotNull(stagiaire.getId());
        assertNotNull(stagiaire.getOrganisme());
    }

    @Test
    public void RechercherNomInexistant() {
        List<Stagiaire> list = businessStagiaire.rechercher(0, "quica");
        assertNotNull(list);
        assertTrue(list.size() == 0);
    }

}
